package com.findMoneyGame.pages.preloading {
	import flash.events.Event;

	import com.findMoneyGame.events.UserEvent;
	import com.findMoneyGame.pages.preloading.ThePreloader;
	import com.findMoneyGame.pages.preloading.PreloaderState;

	public class UserExistsCheckingState extends PreloaderState {
		
		private static const LOADING_PARTS_LOADED = 2;

		public function UserExistsCheckingState (thePreloader : ThePreloader) { super(thePreloader); }
		
		public function start () {
			trace('Состояние прелоадера: проверка, существует ли пользователь');
			// подписываемся на события успешной и ошибочной проверки существования пользователя с полученным id
			user.addEventListener(UserEvent.CHECK_EXISTS_COMPLETE, checkUserExistsComplete);
			user.addEventListener(UserEvent.CHECK_EXISTS_ERROR, checkUserExistsError);
			// запускаем асинхронный процесс проверки, существует ли такой пользователь
			user.beginCheckExists();
			// подписываемся на событие вхождения в каждый кадр функцией которая заполняет полосу загрузки
			thePreloader.addEventListener(Event.ENTER_FRAME, checkUserExists);
		}

		private function checkUserExistsComplete (e : Event) {
			unsubscribe();
			if (user.exists) {
				new UserDataFetchingState(thePreloader).start();
			} else {
				new CreatingNewUserState(thePreloader).start();
			}
		}
		private function checkUserExistsError (e : Event) {
			unsubscribe();
			thePreloader.addChild(new LoadingErrorPage());
		}
		private function checkUserExists (e : Event) {
			var user = user;
			var progress = user.bytesTotal == 0 ? 0 : user.bytesLoaded / user.bytesTotal;
			thePreloader.setPreloadingPercent((LOADING_PARTS_LOADED + progress) / LOADING_PARTS_COUNT);
		}
		private function unsubscribe () {
			thePreloader.removeEventListener(Event.ENTER_FRAME, checkUserExists);
			user.removeEventListener(UserEvent.CHECK_EXISTS_COMPLETE, checkUserExistsComplete);
			user.removeEventListener(UserEvent.CHECK_EXISTS_ERROR, checkUserExistsError);
		}
	}
}